package upc.edu.business;

import java.util.ArrayList;


import upc.edu.bean.DeclaracionJurada;
import upc.edu.bean.Usuario;

public class AdmDeclaracionJurada {

	private ArrayList<DeclaracionJurada> declaraciones;

	public AdmDeclaracionJurada() {
		declaraciones = new ArrayList<DeclaracionJurada>();
	}

	public void registrarDeclaracion(int idTarea, String responsable,
			String fecAsu, int tipo, String fecRef, String fecVen,
			String comentario, String fecPub, String fecDoc, String numDoc)throws Exception{
		
		if(responsable.isEmpty()){
			throw new Exception("Debe ingresar un Responsable");
		}
		
		if(comentario.isEmpty()){
			throw new Exception("Debe ingresar un Motivo");
		}
		
		if(fecVen.isEmpty()){
			throw new Exception("Debe ingresar un la fecha de vencimiento");
		}
		
		DeclaracionJurada nuevaDeclaracion = new DeclaracionJurada(idTarea,
				responsable, fecAsu, tipo, fecRef, fecVen, comentario, fecPub,
				fecDoc, numDoc);
		
		declaraciones.add(nuevaDeclaracion);
	}

	public String modificaDeclaracion(DeclaracionJurada dj) {
		try {
			String mensaje = "Codigo incorrecto. No se puedo modificar la Declaracion Jurada";
			for (DeclaracionJurada declaracion : declaraciones) {
				if (declaracion.getIdTarea() == dj.getIdTarea()) {
					if (declaracion.getEstado().equalsIgnoreCase("Confirmado")) {
						mensaje = "Declaracion Jurada confirmada: Solo se actualizo la fecha de publicacion";
						declaracion.setFecPub(dj.getFecPub());
					} else {
						mensaje = "Se modifico la Declaracion Jurada";
						declaracion.setComentario(dj.getComentario());
						declaracion.setFecAsu(dj.getFecAsu());
						declaracion.setFecDoc(dj.getFecDoc());
						declaracion.setFecPub(dj.getFecPub());
						declaracion.setFecRef(dj.getFecRef());
						declaracion.setFecVen(dj.getFecVen());
						declaracion.setResponsable(dj.getResponsable());
						declaracion.setComentario(dj.getComentario());
						declaracion = dj;
					}
				}
			}
			return mensaje;
		} catch (Exception ex) {
			return "Se produjo un error inesperado";
		}
	}

	public void eliminarDeclaracion(int idTarea) {
		DeclaracionJurada declaracion = buscarDeclaracion(idTarea);
		if (declaracion != null) {
			declaraciones.remove(declaracion);
		}
	}

	public DeclaracionJurada buscarDeclaracion(int idTarea) {
		for (DeclaracionJurada declaracion : declaraciones)
			if (declaracion.getIdTarea() == idTarea)
				return declaracion;
		return null;
	}

	public int getTotalDeclaraciones() {
		return declaraciones.size();
	}

	public void confirmar(int idTarea) {
		for (DeclaracionJurada declaracion : declaraciones) {
			if (declaracion.getIdTarea() == idTarea) {
				declaracion.setEstado("Confirmado");
			}
		}
	}

	public void notificarUsuarios(int idTarea, ArrayList<Usuario> usuarios) {
		for (DeclaracionJurada declaracion : declaraciones) {
			if (declaracion.getIdTarea() == idTarea) {
				declaracion.setNotificacion(usuarios);
			}
		}
	}
	
	public void agregaUsuarioNotificacion(int idTarea,Usuario usuario){
		for (DeclaracionJurada declaracion : declaraciones) {
			if (declaracion.getIdTarea() == idTarea) {
				declaracion.getNotificacion().add(usuario);
			}
		}
	}
	
	public void eliminaUsuarioNotificacion(int idTarea,Usuario usuario){
		//Busco la Declaracion Jurada en el ArrayList
		for (DeclaracionJurada declaracion : declaraciones) {
			if (declaracion.getIdTarea() == idTarea) {
				//Busco en el ArrayList de Usuarios a notificar
				for (Usuario user : declaracion.getNotificacion()) {
					if(user.getIdUsuario() == usuario.getIdUsuario()){
						declaracion.getNotificacion().remove(usuario);
					}
				}
			}
		}
	}
	
	public int numeroUsuarios(int idTarea){
		for (DeclaracionJurada declaracion : declaraciones)
			if (declaracion.getIdTarea() == idTarea)
				return declaracion.getNotificacion().size();
		return 0;
	}

}
